﻿Public Class epicerie
    Inherits Fruiterie_Atwater.Pagedb

    Private categorieIDSelectionnee As Integer
    Private actionEpicerie As New Hashtable
    Private idActionDemandee As Integer
    Private isActionEffectuee As Boolean

    Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init

        'Recensement des actions autorisées dans l'épicerie
        actionEpicerie.Add("commander", 1)
        actionEpicerie.Add("supprimerProduit", 2)
        actionEpicerie.Add("supprimerPanier", 3)
        actionEpicerie.Add("augmenterQuantiteProd", 4)
        actionEpicerie.Add("diminuerQuantiteProd", 5)

    End Sub

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        'Définition de l'id de l'action demandée par rapport à la Query String
        If Not IsNothing(Request.Params("action")) Then

            If (actionEpicerie.ContainsKey(Request.Params("action"))) Then

                'Si l'action est bien recensée alors on affecte l'id de 
                'l'action du codeBehind pour Select Case
                idActionDemandee = actionEpicerie(Request.Params("action"))

                'On lit l'id de l'action demandée à la fonction qui sera appelée
                Select Case idActionDemandee
                    Case 1
                        Session("panier") = Me.commanderProduit(Request.Params("produit"), CType(Session("panier"), Hashtable))
                    Case 2
                        Session("panier") = Me.supprimerProduit(Request.Params("produit"), CType(Session("panier"), Hashtable))
                    Case 3
                        Session("panier") = New Hashtable
                    Case 4
                        Session("panier") = Me.commanderProduit(Request.Params("produit"), CType(Session("panier"), Hashtable))
                    Case 5
                        Session("panier") = Me.diminuerQuantProduit(Request.Params("produit"), CType(Session("panier"), Hashtable))
                    Case Else
                        'Par précaution si le lien n'est pas établit
                        'Response.Redirect("epicerie.aspx")
                End Select

            Else
                'on redirige sur la même page si l'action
                'n'est pas présente dans le Hastable
                'Response.Redirect("epicerie.aspx")
            End If

        Else

        End If

        'Affichage du panier manager uniquement si items contenu dans la session panier
        If Not (IsNothing(Session("panier"))) Then

            If (CType(Session("panier"), Hashtable)).Count > 0 Then

                PanelManagerPanier.Visible = True
                BulletedList1.DataSource = CType(Session("panier"), Hashtable)
                BulletedList1.DataBind()

            End If

        End If

        If Not (IsPostBack) Then
            ListView1.DataSourceID = "LinqDataSourceProduitsAll"
            ListView1.DataBind()
        End If
        If Not (IsNothing(Request.Params("noCat"))) Then
            ListView1.DataSourceID = "LinqDataSourceProduitsQueryByCat"
        End If

    End Sub



    Protected Sub LinqDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.LinqDataSourceSelectEventArgs) Handles LinqDataSourceCategorie.Selecting

    End Sub

    Private Sub DropDownListCategorie_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownListCategorie.SelectedIndexChanged

        'On s'assure que la requete est uniquement basée sur des integer
        'et que l'élément sélectionné n'est pas le texte par défaut
        If (Integer.TryParse(DropDownListCategorie.SelectedItem.Value, categorieIDSelectionnee) And DropDownListCategorie.SelectedItem.Value <> -2) Then

            If (DropDownListCategorie.SelectedItem.Value = -1) Then
                ListView1.DataSourceID = "LinqDataSourceProduitsAll"
            Else
                Response.Redirect("epicerie.aspx?noCat=" & categorieIDSelectionnee)
            End If


        End If

    End Sub

    'quantite As String --> quantite As Integer
    Public Function commanderProduit(ByVal idProduitRequete As String, ByRef hTsessionPanier As Hashtable) As Hashtable

        If Not (IsNothing(hTsessionPanier)) Then
            If Not (IsNothing(idProduitRequete)) Then

                Dim idProduit As Integer

                If (Integer.TryParse(idProduitRequete, idProduit)) Then

                    Dim p As produit = man.getProduitById(idProduit)

                    'On s'assure que le produit demandé par la Query String 
                    'existe bel et bien

                    If Not (IsNothing(p)) Then

                        'Si le produit est deja recensé dans le panier du client
                        If (hTsessionPanier.ContainsKey(idProduit)) Then

                            'Dim p_tmp As produit = hTsessionPanier(idProduit)
                            Dim p_tmp As ProduitDemande = hTsessionPanier(idProduit)

                            'Checking quantite avt màj
                            If (p_tmp.Produit.qteProduit >= (p_tmp.QuantiteDemandee + 1)) Then
                                p_tmp.QuantiteDemandee += 1
                            End If

                            hTsessionPanier.Remove(idProduit)
                            hTsessionPanier.Add(idProduit, p_tmp)

                        Else
                            'Quantite demandee par defaut a l'action commandee --> 1
                            Dim prodDemande As New ProduitDemande(p, 1)
                            hTsessionPanier.Add(idProduit, prodDemande)
                        End If

                    End If

                End If

            End If

        End If

        Return hTsessionPanier

    End Function

    Public Function supprimerProduit(ByVal idProduitRequete As String, ByRef hTsessionPanier As Hashtable) As Hashtable

        If Not (IsNothing(hTsessionPanier)) Then
            If Not (IsNothing(idProduitRequete)) Then

                Dim idProduit As Integer

                If (Integer.TryParse(idProduitRequete, idProduit)) Then

                    Dim p As produit = man.getProduitById(idProduit)

                    'On s'assure que le produit demandé par la Query String 
                    'existe bel et bien

                    If Not (IsNothing(p)) Then

                        'on verifie que le produit est deja recensé dans le panier du client
                        If (hTsessionPanier.ContainsKey(idProduit)) Then
                            hTsessionPanier.Remove(idProduit)
                        End If

                    End If

                End If

            End If

        End If

        Return hTsessionPanier

    End Function

    Public Function diminuerQuantProduit(ByVal idProduitRequete As String, ByRef hTsessionPanier As Hashtable) As Hashtable

        If Not (IsNothing(hTsessionPanier)) Then
            If Not (IsNothing(idProduitRequete)) Then

                Dim idProduit As Integer

                If (Integer.TryParse(idProduitRequete, idProduit)) Then

                    Dim p As produit = man.getProduitById(idProduit)

                    'On s'assure que le produit demandé par la Query String 
                    'existe bel et bien

                    If Not (IsNothing(p)) Then

                        'Si le produit est deja recensé dans le panier du client
                        If (hTsessionPanier.ContainsKey(idProduit)) Then

                            'Dim p_tmp As produit = hTsessionPanier(idProduit)
                            Dim p_tmp As ProduitDemande = hTsessionPanier(idProduit)

                            'Checking quantite avt màj
                            If ((p_tmp.QuantiteDemandee - 1) > 0) Then
                                p_tmp.QuantiteDemandee -= 1

                                hTsessionPanier.Remove(idProduit)
                                hTsessionPanier.Add(idProduit, p_tmp)

                            End If


                        End If


                    End If

                End If

            End If


        End If

        Return hTsessionPanier

    End Function


End Class